package com.bbva.kyfb.kyfbdto.abstracts;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.persistence.Query;

import com.bbva.jee.arq.spring.core.contexto.ArqSpringContext;
import com.bbva.jee.arq.spring.core.gce.ExcepcionEjecucionAplicacion;
import com.bbva.jee.arq.spring.core.util.excepciones.PropiedadNoEncontradaExcepcion;
import com.bbva.kyfb.kyfbdaofo.interfaces.BitDao;
import com.bbva.kyfb.kyfbdtofo.BuzonItem;
import com.bbva.kyfb.kyfbdtofo.firmas.errores.Errores_kyfbfo_servicios;
import com.bbva.kyfb.kyfbjpatlsb.dominiotlsb.Tbdbzbit;
import com.bbva.kyfb.kyfbjpatlsb.dominiotlsb.TbdbzbitPK;

public abstract class BitDaoAbstract extends DaoAbstract<Tbdbzbit, TbdbzbitPK>
		implements BitDao {

	public BitDaoAbstract() {
		super(BitDaoAbstract.class);
	}

	/**
	 * Esta consulta no la migro a jpa debido a que se actualizan datos de la pk, lo cual
	 * es realmente una incongruencia ya que estariamos hablando de otro registro, pero el sql
	 * normal lo permite
	 * 
	 * Esta consuta solo puede dar error en caso que el registro que intentanmos actualizar no
	 * se encuentra en base de datos, con lo cual se lanza el error y se finaliza el proceso
	 */
	@Override
	public int actualizarBuzon(BuzonItem aBuzonItem) {
		try {
			String queryUpdateBuzon = ArqSpringContext
					.getPropiedad("TLSB.TBDBZBIT.UPDATEBUZON");
			Query query = entityManager.createNativeQuery(queryUpdateBuzon);

			SimpleDateFormat sdf = new SimpleDateFormat(
					"yyyy-MM-dd-HH.mm.ss.SSS");
			query.setParameter("TIM_FIRMA", sdf.parse(aBuzonItem.getFecha()));
			query.setParameter("COD_LOGONAPL", aBuzonItem.getLogon());
			query.setParameter("XTI_BUZON", aBuzonItem.getXtibuzon());
			query.setParameter("COD_CANALDI", aBuzonItem.getCanal());
			query.setParameter("COD_BANCOINT", aBuzonItem.getBancoInterno());
			query.setParameter("QNU_NUMITEM", aBuzonItem.getNumItem());
			
			return query.executeUpdate();
			
		} catch (ParseException parseException) {
			throw new ExcepcionEjecucionAplicacion(
					Errores_kyfbfo_servicios.ERROR_EN_SQL);
		} catch (PropiedadNoEncontradaExcepcion propiedadNoEncontradaExcepcion) {
			throw new ExcepcionEjecucionAplicacion(
					Errores_kyfbfo_servicios.ERROR_EN_SQL);
		}
	}
}